package br.com.flexdev.util.imagem;

import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ThumbGenerator {

	private String dirThumb = "C:\\Desenvolvimento\\Workspace 3.3\\Projetoflexdev\\WebContent\\img\\thumb\\";
	private String dirOriginal = "C:\\Desenvolvimento\\Workspace 3.3\\Projetoflexdev\\WebContent\\img\\";
	private String nomeImagem;
	
	public void gerarThumb() throws Exception 
	{
		Image imagem = Toolkit.getDefaultToolkit().getImage(dirOriginal+nomeImagem);
		MediaTracker mediaTracker = new MediaTracker(new Container());
		mediaTracker.addImage(imagem, 0);
		mediaTracker.waitForID(0);

		// define a qualidade da imagem
		int qualidade = 100; // 100%

		// define a largura e altura do thumbnail
		int largura = 200;
		int altura = 200;
		double thumbRatio = (double) largura / (double) altura;
		int larguraImagem = imagem.getWidth(null);
		int alturaImagem = imagem.getHeight(null);
		double imageRatio = (double) larguraImagem / (double) alturaImagem;
		
		if (thumbRatio < imageRatio) {
			altura = (int) (largura / imageRatio);
		} else {
			largura = (int) (altura * imageRatio);
		}

		// Desenha a imagem original para o thumbnail e
		// redimensiona para o novo tamanho
		BufferedImage thumbImage = new BufferedImage(largura, altura,BufferedImage.TYPE_INT_RGB);
		Graphics2D graphics2D = thumbImage.createGraphics();
		
		graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
		graphics2D.drawImage(imagem, 0, 0, largura, altura, null);

		// Salva a nova imagem
		BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dirThumb+nomeImagem));
		
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
		param.setQuality((float) qualidade / 100.0f, false);
		
		encoder.setJPEGEncodeParam(param);
		encoder.encode(thumbImage);
		out.close();
	}
	
	public void setDirOriginal(String dirOriginal) {
		this.dirOriginal = dirOriginal;
	}
	
	public void setNomeImagem(String nomeImagem) {
		this.nomeImagem = nomeImagem;
	}
	
	public String getDirThumb() {
		return dirThumb;
	}

	public void setDirThumb(String dirThumb) {
		this.dirThumb = dirThumb;
	}

	public String getDirOriginal() {
		return dirOriginal;
	}

	public String getNomeImagem() {
		return nomeImagem;
	}
}
